package net.zoneland.knowledge.service;

import java.util.List;
import java.util.concurrent.ExecutionException;

import net.zoneland.knowledge.controller.bean.UomUserOrgQueryVo;
import net.zoneland.knowledge.model.*;

/**
 * 党员/党组织业务接口.
 * @author zmq
 * @Date 2022/8/26 16:17
 */
public interface PartyService {
    /**
     * 查询党员.
     * @param condition 查询条件
     * @return 党员集合
     */
    List<PartyUser> searchByCondition(final UomUserOrgQueryVo condition);
    /**
     * 查询党组织.
     * @param orgName 组织名称
     * @param page 页
     * @param pageSize 每页记录数
     * @param user 当前登陆人
     * @return 党组织集合
     */
    List<PartyOrg> searchByOrgName(String orgName, int page, int pageSize, LoginUserPojo user);
    /**
     * 查询党员.
     * @param beginTime 开始时间
     * @return 党员集合
     */
    List<PartyUser> getUserByTime(final String beginTime);
    /**
     * 查询党组织.
     * @param beginTime 开始时间
     * @return 党组织集合
     */
    List<PartyOrg> getOrgByTime(final String beginTime);

    /**
     * 查询党组织.
     * @param orgUUID 部门Id
     * @return 部门信息
     */
    PartyOrg getOrgByUuid(String orgUUID);

    /**
     * 查询党小组.
     * @param orgGroupUUID 部门Id
     * @return 部门信息
     */
    PartyGroup getGroupByUuid(String orgGroupUUID);

    /**
     * 根据党组织id获取党组织里所有党员干事
     * @param orgUuid
     * @return
     */
    List<PartyUser> getGanshiByOrgUuid(String orgUuid);

    /**
     * 查询党组织信息.
     * @param condition 查询条件
     * @return 党组织列表
     */
    List<PartyOrgVoForSelect> searchOrgByConditionForTree(final UomUserOrgQueryVo condition);

    /**
     * 查询党员信息.
     * @param condition 查询条件
     * @return 党员列表
     */
    List<PartyUserVoForSelect> searchUserByConditionForTree(final UomUserOrgQueryVo condition);

    /**
     * 查询党员手机号.
     * @param conditionList 查询条件
     * @return 手机列表
     */
    List<String> searchMobileListByCondition(final List<UomUserOrgQueryVo> conditionList);

    /**
     * 查询虚拟群组名称.
     * @param userId 当前用户
     * @return 群组名称列表
     */
    List<VirtualGroupName> queryGroupName(String userId);

    /**
     * 根据群组ID查询成员信息
     * @param groupId 群组id
     * @return 群组成员列表
     */
    List<VirtualGroup> queryGroupMemberByGroupId(String groupId);

    /**
     * 查询三会一课反向巡检组织信息.
     * @param companyDn 公司编号
     * @return 反向巡检信息
     */
    List<SanKeReverse> getOrg(String companyDn);

    /**
     * 根据员工编号或者手机号查询党员信息
     * 优先匹配员工编号
     * @param empNo 员工编号
     * @param mobile 手机号
     * @return 党员信息
     */
    PartyUser queryPartyUserByEmpNoOrMobile(final String empNo, final String mobile);

    /**
     * 根据员工编号查询党员信息.
     * @param empNo 员工编号
     * @return 党员信息
     */
    PartyUser findPartyUserByEmpNo(final String empNo);

    /**
     * 根据手机号查询党员信息.
     * @param mobile 员工手机号
     * @return 党员信息
     */
    PartyUser findPartyUserByMobile(final String mobile);


}
